#!/bin/bash

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m' # 无颜色

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 设置工作目录
APP_DIR="/var/www/box-user"
cd $APP_DIR
source venv/bin/activate

# 设置环境变量
export DJANGO_SETTINGS_MODULE="boxuser.settings"

# 配置远程数据库连接信息
DB_NAME="csss"
DB_USER="csss"
DB_PASSWORD="12345"
DB_HOST="106.15.51.42"
DB_PORT="3306"

log_info "开始初始化数据库..."
log_info "使用远程数据库: ${DB_HOST}:${DB_PORT}"

# 确保.env文件包含正确的数据库配置
log_info "更新环境变量配置..."
ENV_FILE="${APP_DIR}/.env"

# 检查.env文件是否存在
if [ ! -f "$ENV_FILE" ]; then
    log_warn "环境变量文件不存在: ${ENV_FILE}"
    log_info "创建新的环境变量文件..."
    touch "$ENV_FILE"
fi

# 更新数据库配置
log_info "更新.env文件中的数据库配置..."
cat > "$ENV_FILE" << EOF
DB_NAME=${DB_NAME}
DB_USER=${DB_USER}
DB_PASSWORD=${DB_PASSWORD}
DB_HOST=${DB_HOST}
DB_PORT=${DB_PORT}
SECRET_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*(-_=+)' | head -c 50 || echo "django-insecure-default-key-please-change")
DEBUG=False
ALLOWED_HOSTS=*,localhost,127.0.0.1
DEEPSEEK_API_KEY=sk-34ca6bad403c43529b1f079613c7bb68
EOF

log_info "环境变量已更新: ${ENV_FILE}"

# 检查数据库连接
log_info "检查数据库连接..."
python -c "
import os
import django
from django.db import connection
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'boxuser.settings')
django.setup()
try:
    connection.ensure_connection()
    print('数据库连接成功!')
except Exception as e:
    print(f'数据库连接失败: {e}')
    exit(1)
"

if [ $? -ne 0 ]; then
    log_error "数据库连接失败，请检查连接信息"
    exit 1
fi

# 执行数据库迁移
log_info "执行数据库迁移..."
python manage.py makemigrations --noinput
python manage.py migrate --noinput

# 检查是否存在超级用户
log_info "检查超级用户..."
SUPERUSER_EXISTS=$(python -c "
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'boxuser.settings')
django.setup()
from django.contrib.auth import get_user_model
User = get_user_model()
print(User.objects.filter(is_superuser=True).exists())
")

if [ "$SUPERUSER_EXISTS" = "True" ]; then
    log_info "超级用户已存在，跳过创建"
else
    log_info "创建超级用户..."
    # 提示用户输入超级用户信息
    read -p "输入超级用户名称 (默认: admin): " ADMIN_USER
    ADMIN_USER=${ADMIN_USER:-admin}
    
    read -p "输入超级用户Email (默认: admin@example.com): " ADMIN_EMAIL
    ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}
    
    read -s -p "输入超级用户密码 (默认: admin): " ADMIN_PASSWORD
    echo ""
    ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
    
    # 创建超级用户
    python -c "
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'boxuser.settings')
django.setup()
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(username='$ADMIN_USER').exists():
    User.objects.create_superuser('$ADMIN_USER', '$ADMIN_EMAIL', '$ADMIN_PASSWORD')
    print('超级用户创建成功')
else:
    print('用户名已存在，无法创建超级用户')
"
    
    if [ $? -eq 0 ]; then
        log_info "超级用户创建完成"
    else
        log_error "超级用户创建失败"
    fi
fi

# 加载初始数据(如果有fixtures)
if [ -d "$APP_DIR/fixtures" ]; then
    log_info "加载初始数据..."
    for fixture in $APP_DIR/fixtures/*.json; do
        if [ -f "$fixture" ]; then
            log_info "加载 $fixture..."
            python manage.py loaddata "$fixture"
        fi
    done
else
    log_info "未找到初始数据目录，跳过数据加载"
fi

# 检查必要的表是否存在
log_info "验证数据库表结构..."
python -c "
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'boxuser.settings')
django.setup()
from django.db import connection

with connection.cursor() as cursor:
    cursor.execute(\"\"\"
    SELECT COUNT(*) 
    FROM information_schema.tables 
    WHERE table_schema = '$DB_NAME'
    AND table_name IN ('accounts_user', 'blindbox_blindbox', 'order_order')
    \"\"\")
    count = cursor.fetchone()[0]
    if count < 3:
        print(f'警告: 缺少必要的表! 只找到 {count}/3 个核心表')
        exit(1)
    else:
        print('所有必要的表都已创建')
"

if [ $? -eq 0 ]; then
    log_info "数据库结构验证通过!"
else
    log_warn "数据库结构验证失败，可能需要手动检查"
fi

log_info "远程数据库初始化完成!"
log_info "数据库主机: ${DB_HOST}:${DB_PORT}"
log_info "数据库名称: ${DB_NAME}"
log_info "数据库用户: ${DB_USER}" 